package com.pactera.miyuangroup.service;

import com.pactera.miyuangroup.db.entity.LoginUser;
import com.pactera.miyuangroup.vo.request.*;
import com.pactera.miyuangroup.vo.request.app.AppLoginPara;
import com.pactera.miyuangroup.vo.request.web.AddUserRequest;
import com.pactera.miyuangroup.vo.request.web.LoginPara;
import com.pactera.miyuangroup.vo.request.web.TransportReques;
import com.pactera.miyuangroup.vo.request.web.UpdateUserRequest;
import com.pactera.miyuangroup.vo.response.AccessToken;
import com.pactera.miyuangroup.vo.response.ResultModel;
import com.pactera.miyuangroup.vo.response.User;
import com.pactera.miyuangroup.vo.response.web.TransportRes;
import com.pactera.miyuangroup.vo.response.web.UserListRes;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;

import javax.servlet.http.HttpServletRequest;

/**
 * <p>
 * 用户信息表 服务类
 * </p>
 *
 * @author WangWu
 * @since 2018-04-17
 */
public interface LoginUserService extends IService<LoginUser> {

    /**
     * 用户列表分页查询
     *
     * @param @return
     * @throws
     * @Description:
     * @date 2018年4月17日 上午11:25:14
     */
    Page<UserListRes> selectUserList(PageRequest pageRequest);


    /**
     * web用户登录
     *
     * @param loginPara
     * @return
     */
    AccessToken loginWeb(LoginPara loginPara);

    /**
     * App 用户登录
     *
     * @param loginPara
     * @return
     */
    ResultModel<AccessToken> loginApp(AppLoginPara loginPara);

    /**
     * 发送短信验证码
     *
     * @param phone
     * @return
     */
    String sendSmsCode(String phone);


    /**
     * 查询登录用户信息
     *
     * @param id
     * @return
     */
    User selectLoginInfoById(String id);


    /**
     * 验证用户名是否存在
     * 不区分 web APP
     *
     * @param userName
     * @return
     */
    boolean validateName(String userName);

    /**
     * 验证用户名是否存在
     * 区分web app
     * APP：true
     * Web：false
     *
     * @param userName 用户名
     * @param app      是否是APP用户
     * @return
     */
    boolean validateName(String userName, boolean app);


    /**
     * web 端新增用户
     *
     * @param req
     * @param request
     * @param createrId 创建人ID
     * @return
     */
    boolean AddUserByWeb(HttpServletRequest request, AddUserRequest req, String createrId);

    /**
     * web 端修改用户
     *
     * @param req
     * @param request
     * @param modifierId 修改人ID
     * @return
     */
    boolean UpdateUserByWeb(HttpServletRequest request, UpdateUserRequest req, String modifierId);

    /**
     * 查询配送员信息
     *
     * @param transportReques
     * @param orgId
     * @return
     */
    Page<TransportRes> selectTransportInfoList(TransportReques transportReques, String orgId);


    /**
     * 同步用户信息
     */
    boolean syncMiyuanUserInfo();

    /**
     * 同步用户信息
     */
    void syncMiyuanUserSchedulerInfo();
}
